<?php
use Home\Service\WechatService;
use Home\Service\AccountService;
// +----------------------------------------------------------------------
// | Date:2017年2月9日
// +----------------------------------------------------------------------
// | Author: EK_熊<1439527494@qq.com>
// +----------------------------------------------------------------------
// | Description: 此文件作用于****
// +----------------------------------------------------------------------




/**
 * 根据时间戳，获取星期
 * @param unknown $time
 * date:2017年2月10日
 * author: EK_熊
 */
function get_week($time){
     $time = is_string($time) ? strtotime($time) : $time;
     $week = date('w',$time);
     switch($week){
         case 0 : $weekstr = '日';break;
         case 1 : $weekstr = '一';break;
         case 2 : $weekstr = '二';break;
         case 3 : $weekstr = '三';break;
         case 4 : $weekstr = '四';break;
         case 5 : $weekstr = '五';break;
         case 6 : $weekstr = '六';break;
     }
     return '周'.$weekstr;
}



/**
 * 获取日期
 * @param unknown $time
 * @param string $moment
 * @return unknown
 * date:2017年2月21日
 * author: EK_熊
 */
function get_day($time,$moment=''){
    $time = is_string($time) ? strtotime($time) : $time;
    $day = date('Y-m-d',$time);
    if ($moment) return $moment = strtotime("$day $moment");
    return $day;
}


/**
 * 输出假期类型
 * @param unknown $typecode
 * date:2017年2月27日
 * author: EK_熊
 */
function get_vacation_name_ch($code){
    $type1 = C('VACATION_TYPE'); 
    $type2 = C('APPLY_TYPE'); 
    $type3 = C('LEAVE_TYPE');
    foreach ($type3 as $k=>$v){
        $type_leave[$v['value']] = $v['title'];
    }
    $type = $type1+$type2+$type_leave;
    return $type[$code];
}


/**
 * 部门下拉菜单
 * 
 * date:2017年3月7日
 * author: EK_熊
 */
function dep_select($dep_id=''){
    $department = D('Home/Account','Service')->get_department_select($dep_id);
    return $department;    
}

/**
 * 计算两个时间的天数差
 * @param unknown $start
 * @param unknown $end
 * date:2017年3月8日
 * author: EK_熊
 */
function diff_days($start,$end){
    $start = is_string($start) ? strtotime($start) : $start;
    $end = is_string($end) ? strtotime($end) : $end;
    $days = ($end - $start)/86400;
    return abs($days);
}


/**
 * 获取时间范围内的工作日【总分钟数】,排除法定节假日，补班，双休，哺乳期
 * @param unknown $start
 * @param unknown $end
 * date:2017年3月8日
 * author: EK_熊
 */
function work_days_in_interval($start,$end,$sn=''){
    $timestamp_start = strtotime($start);
    $timestamp_end = strtotime($end);
    $days = ($timestamp_end - $timestamp_start)/86400;
    $workdays = 0;
    
    $festival = M('Festival')->where(['date'=>['between',["$start 00:00:00","$end 23:59:59"]]])->getField("date,type");
    
    //检查是否有哺乳期需要过滤
    $accountService = new AccountService();
    $suckling = $accountService->suckling($sn);
    $subsidy_hour = 0;//补贴的小时数（哺乳期）
    for ($i=0;$i<=$days;$i++){
        $curdatetime = strtotime("+{$i} day",$timestamp_start);
        $curDate = date('Y-m-d',$curdatetime);
        $week = date('w',$curdatetime);
        
        //排除节假日
        $festivalType = $festival[$curDate];
        if (($week == 0 || $week == 6)){
            if ($festivalType == 2){
                $workdays ++;
                continue;
            }
            continue;
        }else {
            if ($festivalType == 1){
                continue;
            }
            $workdays ++;
        }
        if ($suckling && ($curDate >= $suckling['date_start'] && $curDate <= $suckling['date_end'])) {
          $subsidy_hour ++;   
        }
    }
    if ($sn){
        $workdays = $workdays - workdays_join_and_quit($sn,$start,$end);
    }
    $workmin = $workdays*8*60 - $subsidy_hour*60;//减去补贴的时数，计算总的应出勤分钟数
    return ['day'=>$workdays,'min'=>$workmin];
}



/**
 * 是否需要上班，
 * 需要上班：1.周一至周五(不是法定节假日);2.周日周六(需要补班)
 * 其他情况就不用
 * 
 * 传入日期
 * date:2017年3月9日
 * author: EK_熊
 */
function is_work_day($time=''){
    if (empty($time)){
        $timeStamp = time();
    }else{
        $timeStamp = is_string($time) ? strtotime($time) : $time ;
    }
    $week = date('w',$timeStamp);
    $date = date('Y-m-d',$timeStamp);
    $festival = D('Options')->getOption('festival_day',true);
    /* 周一到周五 */
    if ($week > 0 && $week < 6) {
        if ($festival[$date] == 1) {//法定节假日
            return false;
        }else{
            return true;
        }
    }else{
        //周六日
        if($festival[$date] == 2) {
            return true;
        }else{
            return false;
        }
    }
    
}



/**
 * 获取一天的全部假期分钟数
 * @param unknown $attenDayInfo
 * @return number|unknown
 * date:2017年3月10日
 * author: EK_熊
 */
function leave_mins_day($attenDayInfo){
    $leaveMins = 0;
    $leaveType = array_values(C('VACATION_TYPE_EN'));
    $leaveType[] = 'leave_evection';    
    $leaveType[] = 'leave_long_distance';    
    foreach ($leaveType as $leave_val){
        if ($attenDayInfo[$leave_val] !== null) {
            $leaveMins += $attenDayInfo[$leave_val];
        }
    }
    return $leaveMins;
}


/**
 * 二进制数据流转换成图片
 * @param unknown $base64   二进制数据
 * @param unknown $savepath 路径
 * @param string $name     文件保存名称
 * @return unknown
 * date:2017年1月12日
 * author: EK_熊
 */
function base64ToImg($base64,$savepath,$name=''){

    if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64, $result)){
        $name = empty($name) ? md5(uniqid()) : $name;
        $type = $result[2];

        $img = base64_decode(str_replace($result[1], '', $base64));
        $path = C('UPLOADPATH')."$savepath/$name.$type";
        $file = file_put_contents("./".$path, $img);//返回的是字节数
        if (!$file) return false; //可能没手动创建目录文件夹
        return $path;
    }
    return false;
}

/**
 * 微信发送模板消息，附带记录日志
            $data=[
                "first"=>[
                    'value'=>"{$name},您好！",
                    "color"=>"#173177"
               ],
                "keyword1"=>[
                    "value"=>"{$pre_day}",
                    "color"=>"#173177"
               ],
                "keyword2"=>[
                    "value"=>"旷工",
                    "color"=>"#173177"
                ],
                "remark"=>[
                    "value"=>'点击查看详情',
                    "color"=>"#173177"
                ]
            ]; 
            $wxInfo =[
                'wx_open_id'=>$wx_openid,
                'wx_data'=>$data,
                'wx_tpl_id'=>'flOuFJS8vEcJLMTGOKNzLpDPFAyBPQDtiSjN_8JyZIg',
                'url'=>C('HOST_NAME').U('Index/index'),
            ] ;
            $logInfo = [
                'from_sn'=>C('SYS_SN'),
                'from_name'=>C('SYS_NAME'),
                'to_name'=>$name,
                'to_sn'=>$v,
                'type'=>2,
                'info'=>"[{$name}][{$pre_day}]旷工！！",
                ];
 * date:2017年3月14日
 * author: EK_熊
 */
function wechat_send_template_msg($wxInfo=[],$logInfo=[]){
    $wechat = new WechatService();
    $ret = $wechat->send_template_message($wxInfo['wx_open_id'],$wxInfo['wx_data'],$wxInfo['wx_tpl_id'],$wxInfo['url']);
    if ($ret !== true){
        $ret =  $wechat->getError();
    }
    /*记录发送日志*/
    if ($logInfo) {
        $add_mesg_log_add = [
            'to_openid'=>$wxInfo['wx_open_id'],
            'created_time'=>CURRENT_TIME,
            'date'=>date('Y-m-d'),
        ];
        $add_log =  $add_mesg_log_add+$logInfo;
        M('MessageWechat')->add($add_log);
    }
    
    
    return $ret;
}

/**
 * 把分钟数转换成 xx小时xx分钟
 * @param unknown $totalmin
 * @return string
 * date:2017年3月16日
 * author: EK_熊
 */
function time_hour_min_zh($totalmin){
    $min = $totalmin%60;
    $h = floor($totalmin/60);
    return $h.'小时'.$min.'分钟';
}

/**
 * 一天8小时制，显示xx天xx小时
 * @param unknown $totalmin
 * date:2017年4月28日
 * author: EK_熊
 */
function time_day_8hour_zh($totalmin){
    $h = '';
    $d = '0天';
    $m = '';
    if ($totalmin > 0){
        $min = $totalmin % 480;
        $dayNum = floor($totalmin / 480);
        if ($min){
            $hour = round($min/60,1);
            if ($hour) $h = $hour.'小时';
        }
        $d = $dayNum>0 ? $dayNum.'天':'';
    }
    
    if ($totalmin>0 && $totalmin<60)  {
        return $totalmin.'分钟';
    }elseif($totalmin>=60 && $totalmin<480){
        return $h;
    }
    return $d.$h.$m;
}

/**
 * 读取配置信息ACTUAL_WORK_DAY，获取一个工作日的时间范围
 * @param unknown $time
 * @return string
 */
function get_actual_day_rang($start,$end=''){
    $day = get_day($start);
    $configDay = C('ACTUAL_WORK_DAY');
    $rang[0] = $day.' '.$configDay[0];
    
    if ($end && $end !== $start){
        $day = get_day($end);
        $rang[1] = date('Y-m-d',strtotime($day)+86400).' '.$configDay[1];
    }else{
        $rang[1] = date('Y-m-d',strtotime($day)+86400).' '.$configDay[1];
        
    }
    return $rang;
}

/**
 * 转换小时数，保留小数点2位
 * @param unknown $min
 * date:2017年3月29日
 * author: EK_熊
 */
function  get_hour($min){
    return round($min/60,2);
}

// join_day_in_mon

/**
 * 当前月份入职，计算需要排除掉的应出勤天数
 * 入职月的应出勤天数 = 入职日期在第几天 - 非工作日
 * @param unknown $sn
 * @param unknown $year_mon
 * date:2017年3月30日
 * author: EK_熊
 */
function workdays_join_and_quit($sn,$start,$end){
    $accountService = new AccountService();
    $userinfo = $accountService->get_user_by_field(['sn'=>$sn],'join_date,quit_date');
    $stmp_start = strtotime($start);
    $stmp_end = strtotime($end);
    $joinDays = 0;
    $quitDays = 0;
    //入职时间所处于查询时间范围，计算入职的日期距离$start的天数
    if ($start <= $userinfo['join_date'] && $end >= $userinfo['join_date']) {
        $intrval = work_days_in_interval($start, $userinfo['join_date']);
        $joinDays = $intrval['day']-1;
    }
    //离职时间所处于查询时间范围，计算离职的日期距离$end的天数
    if ($start <= $userinfo['quit_date'] && $end >= $userinfo['quit_date'] && isset($userinfo['quit_date'])) {
        $intrval = work_days_in_interval($userinfo['quit_date'],$end);
        $quitDays = $intrval['day']-1;
    }
    return $joinDays+$quitDays;
}


/**
 * 入职天数 转分钟数,一天的有效分钟数是480
 * @param unknown $sn
 * @param string $cur_year_mon
 * @return number
 * date:2017年3月31日
 * author: EK_熊
 */
function workdays_join_and_quit_min($sn,$cur_year_mon=''){
    return workdays_join_and_quit($sn,$cur_year_mon)*480;
}

/**
 * 生成sql语句，全部假期累加值
 * 假期不要包括外出
 * date:2017年3月31日
 * author: EK_熊
 */
function sql_leave_type($flag = false){
    $leaveType = C('VACATION_TYPE_EN');
    //计算缺勤，是必须排除以下三种情况
    if ($flag){
        unset($leaveType['110']);
        unset($leaveType['104']);
        unset($leaveType['102']);
    }
    $leaveType = array_values($leaveType);
    foreach ($leaveType as $leave_val){
            $leaveTypeStr .= "+ sum($leave_val)";
    }
    $total_leave_sql = '('.ltrim($leaveTypeStr,'+').') as total_leave';
    return $total_leave_sql;
}

/**
 * 检查登录用户是否拥有特权
 * @param array $prcode  特权编号
 * date:2017年4月19日
 * author: EK_熊
 */
function check_privilege($prcode=1){
    $userinfo = get_login_user();
    $account = new AccountService();
    $accountInfo = $account->get_user_by_field(['ep_id'=>$userinfo['id']],'privilege');
    if ($accountInfo['privilege']) {
        $privilege = explode(',',$accountInfo['privilege']);
        return in_array($prcode,$privilege);
    }
    return false;
}

/**
 * 系统发送微信模板消息
 * @param unknown $openid   目标openid
 * @param unknown $name     姓名
 * @param unknown $sn        工号
 * @param array $str        模板内容
 * @param unknown $wx_tpl_id   模板编号
 * @param string $jumpurl     跳转url
 * @param string $log_remark   日志备注
 * @param number $type        日志记录类型
 * date:2017年5月22日
 * author: EK_熊
 */
function wx_send_msg_sys($openid,$name,$sn,$str,$wx_tpl_id,$type,$log_remark,$jumpurl='',$debug=0){
    //发送微信消息
//     $data=[
//         "first"=>[
//             'value'=>$str[0],
//             "color"=>"#173177"
//         ],
//         "keyword1"=>[
//             "value"=>$str[1],
//             "color"=>"#173177"
//                 ],
//         "keyword2"=>[
//             "value"=>$str[2],
//             "color"=>"#173177"
//                 ],
//         "keyword3"=>[
//             "value"=>$str[3],
//             "color"=>"#173177"
//                 ],
//         "keyword4"=>[
//             "value"=>$str[4],
//             "color"=>"#173177"
//                 ],
//         "keyword5"=>[
//             "value"=>$str[5],
//             "color"=>"#173177"
//         ],
//         "remark"=>[
//             "value"=>'点击进入考勤系统',
//             "color"=>"#173177"
//         ]
//         ];
    if ($debug || C('DEBUG_WX_OPENID')) $openid = C('DEBUG_WX_OPENID');
    $data['first']=['value'=>current($str), "color"=>"#173177"];
    for ($i=1;$i<count($str)-1;$i++){
        $data['keyword'.$i]=['value'=>$str[$i], "color"=>"#173177"];
    }
    $data['remark']=['value'=>end($str), "color"=>"#173177"];
    
    $wxInfo =[
        'wx_open_id'=>$openid,
        'wx_data'=>$data,
        'wx_tpl_id'=>$wx_tpl_id,
        'url'=>empty($jumpurl) ? C('HOST_NAME').U('index/index') : $jumpurl,
    ] ;
    
    $logInfo = [
        'from_sn'=>C('SYS_SN'),
        'from_name'=>C('SYS_NAME'),
        'to_sn'=>$sn,
        'to_name'=>$name,
        'type'=>$type,
        'info'=>$log_remark,
        ];
    $sendwechat = wechat_send_template_msg($wxInfo,$logInfo);    
}

/**
 * 获取外出类型信息
 * @param unknown $code
 * date:2017年5月24日
 * author: EK_熊
 */
function get_evection_label($code='',$label=''){
    $eveCfg = C('LEAVE_TYPE');
    if(empty($code)) return $eveCfg;
    foreach ($eveCfg as $k=>$v){
        if ($code == $v['value']){
            return !empty($label) ? $v['label'] : $v;
        }
    }
    return false;
    
}


/**
 * 根据工号获取用户姓名
 * @param unknown $sn
 * date:2017年6月7日
 * author: EK_熊
 */
function get_account_info($where,$field){
    $account = new AccountService();
    $username = $account->get_user_by_field($where,$field);
    return $username[$field];
}
